// PhysicsActor.cs
//
// This file is part of the QuickStart Engine. See http://www.codeplex.com/QuickStartEngine
// for license details.

using System;
using System.Collections.Generic;

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Alex_s_Dream_The_Toy_World
{
    /// <summary>
    /// Interface for all physics actors.
    /// </summary>
    public interface IPhysicsActor : IDisposable
    {
        /// <summary>
        /// Gets/sets the density of the actor.
        /// </summary>
        float Density { get; set; }

        /// <summary>
        /// Gets/sets the mass of the actor.
        /// </summary>
        float Mass { get; set; }

        /// <summary>
        /// Gets/sets the position of the actor.
        /// </summary>
        Vector3 Position { get; set; }

        /// <summary>
        /// Gets/set the orientation of the actor.
        /// </summary>
        Matrix Orientation { get; set; }

        Vector3 LinearVelocity { get; set; }

        Vector3 AngularVelocity { get; set; }

#if !XBOX360
        VertexPositionColor[] BodyVerts { get; }
#endif //!XBOX360

        /// <summary>
        /// Gets the list of shapes composing the actor.
        /// </summary>
        List<ShapeDesc> Shapes { get; }

        void EnableCollisionListening();

        void DisableCollisionListening();

        void AddForceFromOutsideSimulation(Vector3 force);

        void UpdateCollisions();

        void SetMovable(bool movable);

        BoundingBox GetBoundingBox();

        /// <summary>
        /// Make a CharacterBody jump. Only works on actors with a body of type 'CharacterBody'
        /// </summary>
        void CharacterDoJump();
    }
}
